package com.MartynovichIgor.KnowledgeTest.questions;

import com.MartynovichIgor.KnowledgeTest.tools.testtools.Parser;
import com.MartynovichIgor.KnowledgeTest.tools.testtools.TestController;

import java.util.ArrayList;
import java.util.Collections;
import java.util.ResourceBundle;

import static java.lang.System.out;

public class QuestionWithVariantsAndOneAnswer extends Question {
    private ArrayList<String> shuffledAnswerVariants;

    public QuestionWithVariantsAndOneAnswer(String question, String condition, String answer, int questionId) {
        super(question, condition, answer, questionId);
        shuffledAnswerVariants = new Parser().getStringArray(condition, ";");
        Collections.shuffle(shuffledAnswerVariants);
    }

    /**
     * Метод выводит на экран варианты ответов в произвольном порядке.
     */
    @Override
    public void printCondition() {
        ResourceBundle resource = TestController.getLanguageChooser();
        for (int i = 0; i < shuffledAnswerVariants.size(); i++) {
            out.printf("%s%s ", resource.getObject(String.valueOf((char) ('a' + i))), shuffledAnswerVariants.get(i));
        }
        out.println();
    }

    /**
     * Метод принимает ответ пользователя и возвращает количество балов за ответ.
     * @param userInput
     * @return Количество балов за ответ.
     */
    @Override
    public int getUserPointForQuestion(String userInput) {
        String userAnswers = getRealAnswer(userInput);
        return super.getUserPointForQuestion(userAnswers);
    }

    /**
     * Метод преобразует введенную букву в соответствующее выражение.
     * @param userInput
     * @return Возвращает выражение соответствующее букве.
     */
    private String getRealAnswer(String userInput) {
        ArrayList<String> enVariants = new ArrayList<String>();
        enVariants.add("a");
        enVariants.add("b");
        enVariants.add("c");
        enVariants.add("d");
        enVariants.add("e");
        ArrayList<String> ruVariants = new ArrayList<String>();
        ruVariants.add("а");
        ruVariants.add("б");
        ruVariants.add("в");
        ruVariants.add("г");
        ruVariants.add("д");
        String realAnswer = getAnswerVariant(enVariants, userInput);
        if (realAnswer == null) {
            realAnswer = getAnswerVariant(ruVariants, userInput);
        }
        return realAnswer;
    }

    private String getAnswerVariant(ArrayList<String> variants, String userInput) {
        String realAnswer = null;
        for (int i = 0; i < shuffledAnswerVariants.size(); i++) {
            if (variants.get(i).equals(userInput)) {
                realAnswer = shuffledAnswerVariants.get(i);
            }
        }
        return realAnswer;
    }
}
